import chokidar from 'chokidar';
import { fork } from 'child_process';

const targetFolder = './Data_file'; // 要监听的目标文件夹
const targetFile = `${targetFolder}/Main_document.js`; // 要运行的目标文件
let childProcess = null;



// 启动或重启目标文件的子进程
const startTargetFile = () => {
  // 如果已有子进程，先终止它
  if (childProcess) {
    console.log('[监听器] 停止之前的进程...');
    childProcess.kill('SIGTERM');
    childProcess = null;
  }

  // 启动新的子进程
  console.log('[监听器] 启动目标文件...');
  childProcess = fork(targetFile, [], { stdio: 'inherit' });

  // 监听子进程的错误
  childProcess.on('error', (error) => {
    console.error('[监听器] 目标文件发生错误:', error.message);
  });

  // 监听子进程的退出状态
  childProcess.on('exit', (code, signal) => {
    if (code !== 0) {
      console.error(`[监听器] 目标文件退出，退出码：${code}`);
    } else if (signal) {
      console.error(`[监听器] 目标文件退出，退出信号：${signal}`);
    }
    console.log('[监听器] 等待文件变化...');
  });
};

// 初始化监听器
const watcher = chokidar.watch(targetFolder, {
  persistent: true,
  ignoreInitial: true,  // 忽略首次启动时的变化事件
  awaitWriteFinish: true, // 确保文件写入完成后才触发事件
});

// 文件更改时重启子进程
watcher.on('change', (path) => {
  console.log(`[监听器] 文件 ${path} 已更改。重新启动 ${targetFile}...`);
  startTargetFile();
});

// 捕获监听器错误
watcher.on('error', (error) => {
  console.error('[监听器] 监听器发生错误:', error.message);
});

// 首次启动
startTargetFile();
